perm filename TODO[RDG,DBL]9 blob
sn#583298 filedate 1981-05-06 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00007 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 Questions
C00004 00003 Things yet to be done to RLL:
C00012 00004 Misc general sorts of things to be done
C00013 00005 Quickies:
C00016 00006 Units to Rename/Add/Delete
C00028 00007 [5 Apr 81]
C00046 ENDMK
C⊗;
Questions
(Especially related to CORLL)
Things yet to be done to RLL:
updated [8 May 1980], [6 Apr 1980], started [8 Feb 1980]
1. Extend notion of Caching -- ie of a stored value.
Slots are but one way.
General spec for function:
(Pre work)
Look it up
If not found: Compute it
(Post work)
Examples: FunctionSpec
(note it should be calculated by combining Defn, ... if ~∃ HighLevelDefn)
Slots for IExamples((AnyDog))
? Descriptors?
2. Fix slots of AllExamples[AnyFormat] do the right thing. They are (I think)
correct for FSet, FSingleton, FBag and FList; and and other SlotFormat
FnForDeleting, FnForSubstituting, FnForAdding, FnForVerifyingAll, FnForKilling
but not at all for those in AnyValueFormat.
Also, many of these are inconsistent
eg: FExecute - capable of using uUNIT and uSLOT, bound by FindDefault.
Will this get in trouble - ie with recursion?
ANS: New why, with (ValueFor unit slot)
3. Is this how to handle Templates? - perhaps as descriptors, ala SPILL agendae
- so can determine new task by fleshing out such descriptor.
only here will it call that function [in FindDefault]
4. The way of handling functions [Processes] is NOT totally consistent.
Should have arglists,... Also some notion of how to check for what.
New apply - should be: if ∃ n args, if n=1, then slot, n=2 => field,
else just apply defn of first arg...
Change from HowToProcess to LispFn
Fix Processes, so its args can vary
ie, use DomainType for each, with RangeType = "WhoCares"
5. Unit creation is a unit list process - make it so. Give it a defn, whose
rangetype is WhoCares!
Using ApplyToEach ?
Note: This KBupdates is also a UnitProcess -- make it so!
NOTE: for EuriskoProcesses, DomainType deduced from WhatToProcess
6. Production Rules - their formalism, and the like, needs to be resolved.
Figure out more stuff for rules - eg store # of times tried, and success.
More heuristics... (eg AnyUnitCreationRule)
7. Write CommonHLDefn -- HighLevelDefn should be sufficient to define a slot!
Note: Slot Combiners take 3-arguments
First is list of slots,
Second is list of argnames
Second is specifications -- eg TransitiveClosureCircular, Ordered, ...
8. FirstDefined -- new type of slot combiner - like McCarthy OR - when subslots
are disjoint.
10. More work with HighLevelDefn - so if F ≡ (SC f1 f2), then we can determine
the HighLevelDefn of f1, if necessary
11. Figure what goes on FunctionCharacter
12. a) ToCache of AllTypicalExamples - (*Do* SeeU&S +++ AllExamples)
on all units y s.t. y.Isa = (AnyX) [note must be a singleton.]
b) Caching - by storing AllIsas on AnyX, and putting (FSeeU&S AnyX SuperClass*),
Misc general sorts of things to be done
Fix OptimizeCode
Also consider letting each function have a slot which indicates
how to improve it -- eg each of PROG1, PROGN, AND, OR should
all just return their respective arg, if there is only 1.
Similarly LENGTH could suggest looking for embedded APPENDs, etc.
2GWN≠/'↔≠P4(4S→67πJiaD4Ph*nS/≠Qβ?/!α≠:6{JWC&S';:β?→α≡{7C?≡KS'?rβπ;⊃¬≠SπK⊗K;≥↓jβ↔OAπ##∃ααβ∂πO*rt4*≡Cπ;∨*β≠K?jαK↔∂␈∪∪nC/!>∨↔'qβS=∧R*→∨~βCπ∂↑∨∀4T3';'≡Aβ≠'FK;≥β/↓αO3␈!α∂?n∪';↔∩;Mα≠t3?JWε#πS'v9βL4PI#;?:β?9ααβCπK"β?→α≡{7C?≡KS'?rH4*∂F;∨∃π≠=β?vce↓Mε3'↔3'→β≠?∩α⊗~≥π∪↔∂?⊗!↓55π##∃αn;f≠f9β∂πrβ∃β∨+OWn+⊂4(O∪↔7↔n∪↔Iβ&yβ≠'Bα.
Wε#πS↔≠RS>∂}kCWS(h(4)*j≠↔λhQFuα6KaαSOβ'∂πd≠?∪⊗>+:≠Wv≠S'?rA⎇%hQ5β∨O3∃β'"βπCC⊗{CK'∂#∃α∨/"~:N/≠↔⊃↓2α∨↔R≥3NWO.!β[πg+↔M8hP4)EJα≠';O≠!α'≥βπKO+y↓5β/≠↔⊃β>KS!α?∪π77∂∩SgC*p4(4S⊃%α.∀aβ3'↑)βCπ↔≠↔I↓jβ≠?Iα∪¬α7}{O∃β>KS!α∞sS3↔∩↓uβN91↓9rq ↓#≡C?W3"β∃β.Oe1π+O';8h++W∨!α~;/:W;'"q$4(hQEI6nH4(hQQ%α≡Cπ;∨*β≠K?jα?;⊗}1βS=πβWSSNs≥↓!T#=)α4+c↔∂'+S∃↓@A↓99rI%β?rβS#∃π#gC'≡1β↔F7C3/→↓44PK∪=βO!β≠?∩α3'O∧3984PJGW↔∨#'?9Rα∂π9∧Iβ↔3Nk';π&)β?SF+Iβ∪.3';'&K?;MεMβ←.c11β/≠';≥π≠W∂!π#K'∂←→84(hQY%α≡Cπ;∨*β≠W;∨#'?9εK9αSOβ'∂πdK;#↔⊗KSπf*O3?#Rπ≠S/∩CWR63W∃αh4*'2βS#∃π+;'QbαU1βO→β¬β'KC'∂∞aβ?;*aβS#.qβ∪=π##∃βv+∂↔O≡Keβ>{K-β&yβ≠'v!β↔π≡A4+H2UjSOβ'∂πd+cπ7εc↔N?2βOW∂BβS#π"βejMεKMβ;␈9β∪'63↔K↔w!84*&C↔9β>yβS#↔)βπ;"β';[∞c'∪π&)β↔π≡Aβ?→π##↔O*p4)"ng∃ε3'KO"βO↔∃εK→βSF)β';63'∪∂#'?9εKMβS⊗K['πb`4+πv!β?;gIβ∪=π##'Mπ;?K-εK→β;.≠↔OO∂∪e9$hP4*SFKMβ←Nc1β*βCπK&K∂W3∂∪3eβv+∂↔O≡Keβ&yαS>E3π3W*aβ≠?∩βS#∃π#πO-ε∪↔3?:p4(4S9%α7∞[∃α∨/"[π3.)β¬βn∂K=
4*'"βO#?.c⊃4S
uβ↔Gβπ;⊃π#=↓ ∩αUαMεy%1β>C↔K∃⊃↓uα≠RS>∨/"[π3.)↓5βN1αMβO→βGW␈#↔⊃8hQJuα∞#⊃βSFKMα≠rβS=β&C∃β3O≠Qβ?2αMj≠w~WO'v:7fR=04(4TC↔;∂.3?KSBβ'→α≠RS>∨/"[π3.)β'Mε+[↔Iε≠#π;>+⊃?'w3π3'&S↔⊃αCO↔∃β1%%1ε+π∂!ε39β3O≠S↔⊂hS?9α≠R≠;N/≠';≡oJR≡Yπ≠#?Wf!β∃π∪↔∂?oβ'3↔"p4)5jβ'∃β&C∃απ7#↔JC/"[π3.)β?→¬"≡Yβ≡C?W3"βOπeε+KπO*α~V6$:Y04V;⊃β&CπQ1εK9βS/∪91β≡C?W3"β∂πW≡)βS#*απ≠S/∩CWR63W∃Cy%βOf{Qβ?2α~V6$:X4+&yβ∪=π##'Mπ;?K,hP4*C/∪#πC~βWO∃π##∃α>C↔:∂F;∨↔"βS#'~β?Iβ&CπQβ≡c?Q9rp4(2W;O#MβSzαK↔;∞k∃>π&!>∪↔f+S∀4Ph*&W≡*S>∂}kCWS,{_%HJ&WO,#↔≠:}04*S|≠?7C/#⊗WO."d%↓H&∪↔6rWO↔$∪d4*FK∨"3/3↔2S|≠?7C/#∃dLC'∨"f+[↔2&+≠84U≠π7⊗DbS>∂}kCWS(Id&≡7⊗"d#↔≠8hRπ;f∂∪∂#↔'KC∀%↓H&π;M#gC'≡2↔c∞kC3∀hRSgCN≠π2∪∂#εSgε(%dM#gC'≡2∪π&SgC(h(4*/CL$%↓H&↔c∞kC3↔_h*#?=#>CK}≠↔OLJd&3O≠B≠8hP'≠'BαCK?≡+OMα\K∨Mπ#=αC⊗{∂↔O~↓7∪↔ε+;∪↔w!β?9βzt4(hRπ∪⊃εK9βWvKSMβ6{Ih4Ph*7fO≠¬1α∞sf'O
aα↔cO≠R'O
aα[π⊗K↔N←O#!1↓rq84(5nH[5 Apr 81]
0] UpdateInverse doesn't seem to be working - at least when new units are added.
Fixed
[1 Apr]
<Dave: could we have several logically distinct KBs on one file?
< ans: no, but can be simulated...
Description of KBs, at top level [logically distinct]
RLL - only the list of "stops", with essential ones extended.
USERS - list of users, and of classes of users - this KB always loaded in as well.
SLOTS - holds all the slots
LISPFNS - holds the various LISP functions used; needed to reason about ...
Not included, at least not yet:
GENLINFO - misc very high level things, which point to most of rest (basically this
is set of units for classes.)
3) New functions, which use FocusStatus:
DeactivateTask [Inactive]
SuspendTask [Suspended]
ActivateTask [Queued]
ProcessTask [Running] {formally ProcessTaskInstance}
[13 Mar]
5)
a] Give each KB a SubKBs slot, which holds the names of logically seperate
but essential KBs.
b] Twiddling the StandardXUp (XεStart, Finish) functions -- in particular,
change the order of args for them, to do RECOMPILing FIRST! (while units around.)
Fix up WhenXingOptions on TypicalUser (and all examples.)
c] Store stuff in SLOTS and USERS. (once they are subKBs.)
[12 Mar]
Also figure how to use values. [Eg does L-AND work here, or not? - Yes]
Get rid of Agenda, fix Spill,
4) Revert back from AnyRuleSpecFn to slot. Change Conjoining to ListOfParts
(that is, executable parts). Fix IfParts, ThenParts to use this, NOT MySlots.
Units for Known, Unknown, LeaveForLater (in HEURS) - these used in Rules
{Winding thru Spill Rules (R-Backtrack)}
9. Make sure each slot has a MakesSenseFor
- and improve final function to confirm that for each...
13. Class of temporary units - eg instances of AnyFocusInstance - to be deleted
(along with virtual slots) when KB is closed.
---------
[5 Feb]
?????
0. BIG CHANGE: The UNIT should know about the accessing, not the slot! Hence,
associate with each KB (or unit?) the name of the accessing types -
so change GetValue to RLLGetValue, and stick (Get . RLLGetValue) on each
of current KBs (similiarly with Put, Add, ...)
Note: to emulate Units, just put UA-GETVALUE there...
In this way, we can solve Genesereth's & R H-R's complaints, ...
and allow various schemes
for indexing.
?????
- Status: This sorta goes away... -
TypicalVirtualSlot → TypicalComputableSlot
TypicalPrimSlot → TypicalPrimitiveSlot
ToInitialize → ToInitializeValue ← InitializeSlot
ToCache → ToCacheValue ← CacheValue
Delete AnyCT&U, AnyAT&U, TypicalCT&U, TypicalAT&U - they are unnecessary!
(as really just dealing with composition).
2) Finish up various facts about SlotCombiners.
Esp. FnFor?ing, which replaces UsingSlotCombiners, ...
- Status: this should be done now ... still unchecked -
3) New KB - LISPFN - this will house my description of various things which are
now lisp functions, especially
GetValue, ...
MapUnit, ... [note this MAY require fixing I/OTypes - as union of ...]
DefaultGetValue, ...
- Status: Still may need I/OTypes, but pushed this. -
6) Fix up OrderedPrototypes to be more efficient - so renames slot from Prototypes
to OrderedPrototpes, and note that defn of Prototypes can use that: in its defn.
Or just make Prototypes never-cached! (as OrderedPrototypes had been.)
- Status: Done as described -
7) Figure out what to pass along to DefaultAfterPutValue - perhaps it should
be a history list, or the form ( ... (Slot1 Unit1 Add) (Slot0 Unit0 NewVal) ... ).
Maybe not. Newer things toward the front. This should subsume the hassle
now done for FunctionSpec.
Should this only be done for circular things? That is, cases like RangeType?
(so flag, associated with each slot, set to do these things.)
- Status: Ad hoc things passed (and checked for), as necessary -
[17 Dec]
add on RangeInterpreter for UnrestrictedType
10) Find why specifying RangeType (when Format was NIL) erased both.
Some loop there.
11) Make AnyDatatype ⊂ AnyUnaryPredicate, and change slot names appropriately
Is Format ⊂ AnyCodeAl? No - but it is similar....
12) Use LASTPOS for REEVAL's starting position, rather than NIL.
13) Make sure each format's FnForXXXing returns its last argument (which is
now the modif) if successful. Hence forth that will be used!
(When verified that this works, change each DefaultXXXValue function, removing
the check.
14) Decide if ADDTOVAR works, or if this gets stuck on MARKEDASCHANGED...
15) On BQ* macro, fix so only (PROG ((g0012 (CAR sss)) ...) (RETURN (...)), rather
than use those SETQs
10. Use result of DefaultBeforePutValue - and make sure the verifiers return
such [this is modify...]
Things done
16. Need a WhenFilled (Defn like IfNeeded)
[perhaps a ComputeWhenFilled, listing slots to be fixed up]
- this pushes some values along
when a new value has been enterred...
[This can do (1) recomputing Essential slots, and (2) determining value
of slot X when slot Y has been changed.]
Use this to rid self of FunctionSpec monstronsity, by always pushing values into
slots, in all three cases. [Use CacheValue for one not explicitly requested,
with why value explaining this.]
Another solution:
FunctionSpec, when called, automatically caches Defn, DomainType and
RangeType. So these slots don't both caching -- ie ∃ new slot,
ToCacheValueFromElsewhere, which FunctionSpec calls.
Note Defn:ToCacheValue is AlreadyCached (which ≡ NoOp)
(Should the slot-combiner know about this? How?
? (DoAlready (ApplyingFn CAR HighLevelDefn)) ?
[29 Nov]
Each of these - *P, OneOfThese, Predicate, ... should be units.
3) Use BACKQUOTE to advantage, to make more readible code
Rename from HLDefnParser to HLDefnExpander (and for Type)
- fix FunctionSpec & VerifyArgs/VerifyValue
Defn of FunctionSpec - GetAccessFn => GetValue for last chance
(worry of infinite loops...)
[21 Nov]
Fast flag to UU-DIAGNOSE
QUOTE?# => QUOTE? => BACKQUOTE
UF-CANCELNETWORK takes a list
UF-OPENNETWORK & UF-CLOSENETWORK -- 2nd arg is fn to be executed
[NIL defaults to earlier; T does nothing]
-- 3rd arg : T means ReadOnly
-- rewrite own UP-OPENNETWORK -
Twiddle AFTERSYSOUTFORMS, BEFORESYSOUTFORMS
Finally thought of them:
Arg to pass to OverallStartUp, and WhenClosing - so not just name,
put 2nd value, which that function can use.
(This ?th argument to UF-OPENNETWORK/UF-WRITENETWORK)
[14 Sept]
1b) RELATED: ToInvalidate - associated with each slot, indicated what to do
when this value is no longer relevant.
14. IgnoreCached - if given to GetValue, does not do UA-GETVALUE, just uses Defn
to recompute it. Note: old value should be passed to CacheValue - this
had always been NIL before.
[9 Sept 1980]
PrimSlot → AnyPrimSlot ← RemoveVirtualSlots
VirtualSlot → AnyComputableSlot ← RemoveVirtualSlots
$SELF$Slot → Any$SELF$Slot
Examples → UnitExamples
13. Make unit initialization faster
- cache slots, ... on inheritance.
0) Now (4 July) doing:
AnyUser - see #5
0.5) ReadOnly Mode -- set UP.BUMP? to NIL
LOGOUT's advise - to see if any put units since last SYSOUT, or
OpenNetwork (if UF.NETWORKS non-NIL)
[When logging out, ask user -- even if ReadOnly...?]
Store who has used this core image.
2) UnionDT, and IntersectDT - need to deal with cases when types are
different (eg FunctionType & SlotType [transform SlotType into
(FunctionType (?DomainType? UnitType...))
5) AnyUser, in RLL. - here we store which KBs this user will want. In START,
single question: "Your usual?". If Y, these loaded in.
Else gets list, with questions. (May decide these are to be his default, or
not.) Also, his "profile" indicates answers to the questions.
Store with each KB whether or not it was Disconnected (and from whom.)
If not, why even ask to reconnect?
When he creates a new KB, this added to his list.
[4 July 1980]
ActionPartOfRule → AnyActionPartOfRule
IfPartOfRule → AnyIfPartOfRule
ThenPartOfRule → AnyThenPartOfRule
1. Fix EDITU so second arg given to PutValue -- so may verify or not...
2. (QUOTE?# '(LAMBDA (*1) (PROG ?1 *2))
'((G0035))
'((unit slot)
((* this list is bound to *2) (UA-MAPSLOTS unit 'WRITELNTTY))))
returns
(LAMBDA (unit slot)
(PROG (G0035)
(* this list is bound to *2)
(UA-MAPSLOTS unit 'WRITELNTTY)))
That is, QUOTE?1 takes three arguments:
#1: a list, in which substitutions will be made,
#2: a list, whose i-th element is the value for ?i [here ?1 is (G0035)]
#3: a list, whose i-th element is the value for *i [here *1 is (unit slot)]
[8 May 1980]
1. Ramifications of Altering a slot's value -- eg
(i) IF x.S* is changed, THEN ∀ y ε x.(S-1)*, y.S* is invalid
[IF S = T ∪ V, & something is added to x.T
THEN x.S should have that value aded as well - if format is ...]
(ii) IF OrderedX is built from X by some ordering - ie is redundant-but
ordered of X - then when U.X is modified by Adding, or Renaming,
X should be removed from U.SlotsNowOrdered.
5. DomainType, RangeType
ValuesInvalidated - defined from HighLevel, as should Format, Datatypes
1) Make sure VerifyAll is doing the correct thing. Also pass unit and slot name
to it. (Fix it up for rest of ValueFormats.)
Delete now worthless FnForVerifyingAll and -- List.
* 2) MyKB is AnyUnitFunction - make it so.
5) Args to HLDefnParser should be (name (RangeType) ...)
(note: delete HLVerify - now RangeType.)
Define DomainTpe, RangeType
[Note: need only FnForAdding - 1, List, 1st - come from why part.
Units renamed.
FnForRenaming1 → FnForSubstituting1
ToRenameValue → ToSubstValue ← ↓
[DefaultRenameValue → DefaultSubstValue - this a function]
SubSetDT → SubDT
SuperSetDT → SuperDT
SlotsNowOrdered → MySlotsNowOrdered
EssentialVirtualSlots → MyEssentialVirtualSlots
DependantNetworks → DependentNetworks ← GetKBs
ISpecs → ISubClass
PossibleSlotsOfISpecs → PossibleSlotsOfISubClass
ActionType → FunctionType
Fix HLDefn.Defn (or ToInit..) - SortSlots => PutInOrder
CreateSlot - descends from VirtualSlot, not AnySlot
Fn for computing ToParseParts-like thing, so TPP can be eliminated
Format & Datatype - should descend from RangeType, softly (not FunctionSpec)
Names selected - need loops
λ(x) (McDo .. (NOT (Unitp (RPLACA (SETQ ...(EXPLODE (GETSYM))
[in CreateU4S,CreateSlot. ...]
Ask user if he wishes to create a new slot -
[do we want to merge all things invalidated into one?
[ No! Later we might want to do other things, than just invalidate]
If not, just pass HLDefnParser( highleveldefn ) along - use GetGetVal,
and the like...
- so either PSUEDO-slot or REAL-slot
If the "why" to the Invalidate function included "DoInverses", pass this along to
AfterPutValue, so it will actually remove this and that!